@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u0100 ; CIOMAC.LIB0110 ;0120 CIOMAC0130 ;0140 .IF .NOT .DEF OSEQU0150 .ERROR "must include OSEQU.M65"T}0160 .ENDIF 0170 ;0180 ; MACRO: @CH0190 ;0200 .MACRO @CH 0210 .IF %1>70220 LDA %10230 ASL U}A0240 ASL A0250 ASL A0260 ASL A0270 TAX 0280 .ELSE 0290 LDX #%1*160300 .ENDIV}F 0310 .ENDM 0320 ;0330 ;0340 ;0350 ; MACRO: @CV0360 ;0370 ; Loads Constant or Value into0380 ; accumultor (A-reW}gister)0390 ;0400 .MACRO @CV 0410 .IF %1<2560420 LDA #%10430 .ELSE 0440 LDA %10450 .ENX}DIF 0460 .ENDM 0470 ;0480 .MACRO @LA 0490 @CV %10500 .ENDM 0510 ;0520 ;0530 ; MACRO: @FL0540 ;05Y}50 ; @FL is used to establish a0560 ; filespec (file name)0570 ;0580 .MACRO @FL 0590 .IF %1<2560600 JMP *+Z}%1+40610 @F .BYTE %$1,00620 LDA # <@F0630 STA ICBAL,X0640 LDA # >@F0650 STA ICBAH,X0660 [} .ELSE 0670 LDA # <%10680 STA ICBAL,X0690 LDA # >%10700 STA ICBAH,X0710 .ENDIF 0720 \}.ENDM 0730 ;0740 ;0750 ;0760 ; MACRO: XIO0770 ;0780 ; FORM: XIO cmd,ch[,aux1,aux2][,filespec]0790 ;0800 ; performs]} I/O operations by0810 ; itself or as called by other0820 ; macros. Used as BASIC XIO.0830 ;0840 .MACRO XIO 0850 ^} @CH %20860 @CV %10870 STA ICCOM,X0880 .IF %0>=40890 @CV %30900 STA ICAX1,X0910 @_}CV %40920 STA ICAX2,X0930 .ELSE 0940 LDA #00950 STA ICAX1,X0960 STA ICAX2,X0970 .E`}NDIF 0980 .IF %0=2 .OR %0=40990 @FL "S:"1000 .ELSE 1010 @@IO .= %01020 @FL %$(@@IO)1030 a} .ENDIF 1040 JSR CIOV1050 .ENDM 1060 ;1070 ;1080 ;1090 ; MACRO: OPEN1100 ;1110 ; FORM: OPEN ch,aux1,aux2b},filespec1120 ;1130 ; will attempt to open the given1140 ; channel as in the BASIC open1150 ; command1160 ;1170 .MAc}CRO OPEN 1180 .IF %4<2561190 XIO OPEN,%1,%2,%3,%$41200 .ELSE 1210 XIO OPEN,%1,%2,%3,%41220 d} .ENDIF 1230 .ENDM 1240 ;1250 ;1260 ;1270 ; MACROS: BGET and BPUT1280 ;1290 ; FORM: BGET ch,buf,len1300 ; e} BPUT ch,buf,len1310 ;1320 ; performs block I/O1330 ;1340 ; first: a common macro1350 ;1360 .MACRO @GP 1370 f} @CH %11380 LDA #%41390 STA ICCOM,X1400 LDA # <%21410 STA ICBAL,X1420 LDA # >%21430 STA ICBAg}H,X1440 LDA # <%31450 STA ICBLL,X1460 LDA # >%31470 STA ICBLH,X1480 JSR CIOV1490 .ENDM 1500 ;h}1510 .MACRO BGET 1520 @GP %1,%2,%3,GETCHR1530 .ENDM 1540 ;1550 .MACRO BPUT 1560 @GP %1,%2,%3,PUTi}CHR1570 .ENDM 1580 ;1590 ;1600 ;1610 ; MACRO: PRINT1620 ;1630 ; FORM: PRINT ch[,buffer[,length]]1640 ;1650 ; j}used to print text. Length1660 ; must be given or else buffer1670 ; must be a literal string in1680 ; quotes. Like BASICk} PRINT #.1690 ;1700 .MACRO PRINT 1710 .IF %0>11720 .IF %2<1281730 JMP *+4+%21740 @IO .BYTE %$l}2,$9B1750 @GP %1,@IO,%2+1,PUTREC1760 .ELSE 1770 .IF %0=21780 @GP %1,%2,255,PUTREC1m}790 .ELSE 1800 @GP %1,%2,%3,PUTREC1810 .ENDIF 1820 .ENDIF 1830 .ELSE 1840 n} JMP *+41850 @IO .BYTE $9B1860 @GP %1,@IO,1,PUTREC1870 .ENDIF 1880 .ENDM 1890 ;1900 ;1910 ;1o}920 ; MACRO: INPUT1930 ;1940 ; FORM: INPUT ch,buf,len1950 ;1960 ; performs input as in BASIC1970 ; INPUT command1980p} ;1990 .MACRO INPUT 2000 .IF %0=22010 @GP %1,%2,255,GETREC2020 .ELSE 2030 @GP %1,%2,%3,GETq}REC2040 .ENDIF 2050 .ENDM 2060 ;2070 ;2080 ;2090 ; MACRO: CLOSE2100 ;2110 ; FORM: CLOSE ch2120 ;2130 ;r} closes channel ch2140 ;2150 .MACRO CLOSE 2160 @CH %12170 LDA #CLOSE2180 STA ICCOM,X2190 JSR CIOVs}2200 .ENDM 2210 ;2220 ;2230 ;2240 ; MACRO: P2250 ;2260 ; FORM: P [ch,] buffer2270 ;2280 ; Calls PRINT and uset}s channel 02290 ; if only one parameter is given2300 ; buffer may be a literal string2310 ; in quotes. Like BASIC ?.2320u} ;2330 .MACRO P 2340 .IF %0>22350 ERROR "P: Two parameters max"2360 .ELSE 2370 .IF %0=22380v} .IF %2<1282390 PRINT %1,%$22400 .ELSE 2410 PRINT %1,%22420 .ENDIF 2w}430 .ELSE 2440 .IF %0=02450 PRINT 02460 .ELSE 2470 .IF %1<1282480 x} PRINT 0,%$12490 .ELSE 2500 PRINT 0,%12510 .ENDIF 2520 .ENDIF 253y}0 .ENDIF 2540 .ENDIF 2550 .ENDM 2560 ;2570 ;2580 ;2590 ; MACRO: I2600 ;2610 ; FORM: I buffer2620 z};2630 ; same as BASIC input except2640 ; for ch 0 only for up to2650 ; 40 bytes2660 ;2670 .MACRO I 2680 INPUT {} 0,%1,402690 .ENDM 2700 ;2710 ;2720 ;2730 ; MACROS: GET & PUT2740 ;2750 ; FORM: (GET or PUT) ch,buffer2760 ;27|}70 ; Same as BASIC GET # or PUT #.2780 ;2790 .MACRO GET 2800 BGET %1,%2,12810 .ENDM 2820 .MACRO PUT 2}}830 BPUT %1,%2,12840 .ENDM 2850 ;2860 ;2870 ;2880 ; MACRO: LP2890 ;2900 ; FORM: LP [string]2910 ;2920 ; s~}ame as BASIC LP.2930 ;2940 .MACRO LP 2950 OPEN 7,8,0,"P:"2960 .IF %0=12970 PRINT 72980 .ELS}E 2990 PRINT 7,%23000 .ENDIF 3010 CLOSE 73020 .ENDM 3030 ;3040 ;3050 ;3060 ;3070 ; MACRO: PO}S3080 ;3090 ; FORM: POS X,Y3100 ;3110 ; same as BASIC position3120 ;3130 .MACRO POS 3140 LDA # <%13150 S}TA COLCRS3160 LDA # >%13170 STA COLCRS+13180 LDA #%23190 STA ROWCRS3200 .ENDM 3210 ;3220 ;3230 ;} DATASET UTILITY DUMP Copyright 1985 by Gary C. Crider ================================ The DATASET UTILITY } DUMP (DUD) program will bring back fond memories for those old IBM hands who were users of the DOS DITTO or DOS DEB }E utility programs. DUD will dump (print or display) in over/under chr/hex format, any DOS file or parts thereof, any } valid memory address range, or any disk sector or range of sectors. Single and double density disk drives are suppor }ted. I. GENERAL USAGE A. DUD is machine language, approximately 6K in size, and loads at address $40 }00. It can be accessed using the load function of your favorite DOS, loaded by a binary load }menu, or re- named AUTORUN.SYS if auto- boot is desired. DOS.SYS must be loaded if DOS for- }mat files are to be dumped. DUD will not be effected by the presence or absence of a cartridge in ei }ther slot. B. DUD was written for the ATARI 800/400 with 24K or more RAM. I make no pre- sum }ptions or warranties that it will work on any other models (XL, XE, ST, etc.). C. DUD is menu d }riven and most actions are self-explan- atory, but a few points need to be made: 1. The 'X }- EXIT' selection of the main menu per- forms an operating sys- tem warm start. In most } instances, this will take you to DOS. SYSTEM RESET performs the same function from }any point in the program. 2. From most DUD displays, the ESCape key will re- turn y }ou to the main menu. 3. Most numeric input can be entered in either hex or decimal }notation. Hex values must be pre- ceeded by a dollar sign ($). Notations can be }mixed for a series of parameter selections. For example: START AT? 4096 END A }T? $11F0 is perfectly alright. No value specified may exceed 65535 ($FFFF). D. The }over/under chr/hex for- mat may best be explained by example: Character (ATASCII)- Gary Crider High he }x nybble- 46772476667 Low hex nybble- 71290329452 Scale- 0....5...10 Each position alon }g the scale represents one data byte, the top byte being the ATASCII character re- presentat }ion, and the next two combinig to present the hex representation. In order to make the dumps } more readable, graphics characters and undisplay- able characters are repre- sented as blanks on th }e ATASCII line. A true blank will have 2 and 0 on the second and third lines re- spectively }, as in the above example. Inverse charac- ters will be printed as blanks on dumps to the }printer. A number on the scale line represents the byte count for the byte above the last di }git of the number. II. DUMPING DOS FORMAT FILES A. A DOS file dump is reques- ted by pressing 'D' on the } main menu screen. The dataset name entered must be preceeded by D: or Dn: where n represe }nts the source drive number. B. DOS files are dumped in records. A record is a string of dat }a terminated by a $9B data byte. Any byte encountered containing $9B is considered the end o }f a record. A new dump line is begun with the next byte dumped. C. There are three values dis- } played at the beginning of each line: 1. RBA (Relative Byte Ad- dress) - This is the ac- } tual byte count, from the beginning of the file, of the first byte displayed on this }line. The first byte of the file is considered byte one, so this is a value 'rel }ative to one.' Add- ing this number to the scale value gives the actual displacement for } any given byte. Sub- tract one from this val- ue to find the byte off- set relativ }e to zero. 2. BYTE - This is the byte count within the record, relative to one, of the } first byte displayed on this line. This value is reset to one at the start of each n }ew re- cord. Adding this num- ber to the scale value gives the actual dis- place }ment for any given byte. 3. REC - This is the record number, relative to one, withi }n the file. It is incremented each time a $9B is encountered. D. PARTIAL DUMPS - This option } allows you to select start- ing and/or ending values to denote a portion of the file to be dum }ped. These delimiters can be specified in record counts or byte counts. The RBA and REC va }lues will still reflect displacements from the be- ginning of the files and the BYTE value will stil }l reflect displacement from the start of the record. When a value is not entered (RETURN pres }sed with no preceeding numbers), the START value will default to one and the END value will d }efault to end-of-file. III. DUMPING MEMORY A. A memory dump is requested by pressing 'M' on the main } menu screen. B. Enter the lowest and high- est addresses you would like dumped. The low de- } fault is one. The high de- fault is 65535 ($FFFF). C. Memory is not dumped in records. $9Bs are trea }ted as any other data byte. D. There are two values dis- played at the beginning of each line }: 1. RBA (Relative Byte Ad- dress) - This is the byte number displace- ment, relat }ive to one, from the start of the memory you requested to dump. Subtract one to } obtain an offset from zero. Adding this num- ber to the scale value gives the actual }dis- placement for any given byte. 2. ADDR - This value is the actual memory addre }ss of the first byte displayed on this line. The value is expressed in both de- }cimal and hex. Adding this number to the scale value gives the actual memory address for a }ny given byte. IV. DUMPING SECTORS A. Sector dumps are selected by pressing 'S' on the main } menu screen. B. Enter the object drive num- ber. The defualt drive is drive one. C. Enter } the lowest and high- est sector numbers you would like to dump. The low defualt is one. Since } some formats have more than 720 sectors, the high de- fault is the value entered for the starting } sector. Thus, to dump a single sec- tor, you need only enter the starting sector number. D. B }oot sectors in both single and double densities con- tain only 128 bytes of valid data. When dumping } double density boot sectors (sectors 1-3), the unused 128 bytes will be filled with hex zer }os on the dump. If any sectors other than one thru three were written with 128 as data length in } the DCB, chances are an I/O error will occur when try- ing to dump those sectors. E. There are two } values dis- played at the beginning of each line: 1. BYTE - This is the byte count with }in the secotr, relative to one, of the first byte displayed on this line. Adding this } number to the scale val- ue give the actual byte number within the sector of any giv }en byte. 2. SEC - This is the sector number of the sector be- ing displayed. It is } expressed both in hex and decimal. V. ERROR HANDLING Unrecoverable I/O errors are displayed in a }n I/O error message and the dump is aborted. The standard ATARI error number is displayed in the message }. * SPECIAL OFFERS! * =================== Want the latest versions of all of my software products. I }s $5 too much? Write for or telephone for details: Gary C. Crider 1105 Burgess Ct. Arlington, TX 76015 (817) 467 }-1114too much? Write for or telephone for details: Gary C. Crider 1105 Burgess Ct. Arlington, TX 76015 (817) 467 @e@ @LDD`@[} DATASET UTILITY DUMP V1.0 === Copyright 1985 by Gary C. Crider PAGE 0....5...10...15...20...25...}30...35...40...45...50...55...60... RBA } BYTE } REC |RBA } | |BYTE | } |REC | BYTEREC ADDRSEC }$ $ ADDRESS $NNNN TO $NNNNSECTORS NNNN TO NNNN} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ abcdefghijklmnopqrstuvwxyz } } I/O ERROR # B D L F K`@ FU@DLyHMLHSL|W` DOBl DOBLD= ȩD Jʝ@ ʝB}H ʝC B VBGDEELJEE: JK VL_E^E ^ELnEmE mELE~E ~ER'SW@X}@Y@Z@[@\@CBCACGCCFBe@d@ _@|BClCBCmC` H F $OL0F ENTER} PRINTOUT TITLE (1 LINE):DCEB(HI VHʩ C`H tF $OLvF `@f@ F``fD@E} BPHI VLP``@`` B V`BΝDFELFP:JK VLP`U@D`H F $OLG PARTIAL? (}Y/N) LY`A@H 0G $OLNG} SELECT ECORDS OR YTES? LRB@@ H pG $OL}G START AT? #J @}@@<@@=@ H G $OLG END AT? #J @@@>@@?@H G $OLG `<@=@`<@=}@` T:@4H 'H $OLFH} REQUEST EXCEEDS FILE SIZE. LLD@@R[@<@\@=@ЭLSW@<@X@=@КLS W FU@D }>@?@ G;@ kP IQ:@ VLH VU@S`a@.H ƠH $OLH} ś DO OLDCB AGC}CA AFBH .I $OLGI ENTER START ADDRESS: #J @@@,@@-@H zI $OLIENTER E}ND ADDRESS: #J @@@ @@!@H àI $OLI ,@ OW"@D#@D-@ OW"@D#@D @ OW"@ D#@ D!@} OW"@ D#@ DCC @!@LyHʝC@CD@EBHI VH fJ $OLhJ C@ɛ`$LJ}001:-C@ ذ ٥ԍ@Ս@ @@8`H J $OLJ*INVALID- PLEASE REENTER: 8`"@@@D@ jK5E@}ɛ? K)"@@"@F@ɛ jKG@ɛ* K"@@`@@@@`"@JJJJ@` ;K@"@ @@"@JJJJ@`00&: } "@`A0Gi ) "@LrK0LJ: ) "@"@`A0Gi LK K LH eFhP Ea@ O``@ e@@d@ O`!H K} $OLL} SELECT OUTPUT OPTION:@?@`@@R>@[@?@\@詈;@`>@W@?@X@ҩ;@`B@``@LyUDBE B(HI} VDBE B(HI VEDCE B(HI V`˩A UOAf@ F˩A UOAf@ FE˩B U}OEBf@ FX˩A UOXAf@ F`O` ɛȩ``@`(H V $OL2V 0510152025`};@``@LwF(H PV $OLyV 0510152025`(H V $OLV 0510152025}UT$H ɠV $OLV Copyright 1985 by Gary C. Crider`a@UTa@ zV O``@`U@S`LwFU@D` B V}BDBEJK VLP`UWLVW)JJJJ pW"@UW) pW#@L{W ii0```@ FCBCB AGCC}ACA AFB Z5)$@ Y%@H W $OLX ENTER STARTING SECTOR: #J @@@&@@'@}H 8X $OLNXENTER ENDING SECTOR: #J &@@'@@@(@@)@H X $OLX  AD AD&@ԭ'@} ؠ0D)D(@ԭ)@ ؠ0D)D06D DDDD 0DLY06D} DDDD 0DL=YDC YLH%@ .@/@`.@/@`S S) ` dY.@}0@/@1@.@2@/@3@,@[-@ @[!@0@m @ @1@m!@!@ Y&@'@LYV@ Z LZV@LP[@\@,@[-@:@;@]@} 1Z(@&@)@'@hh``@LyH_@ _@ kP H`'@&@  LqZ0@1@ ʝ[&@ '@ $@R@} Y`ʎ 1[`H ٠Z $OLZ ENTER INPUT DRIVE NUMBER: L`1`@R@q0100 ; FPMAC.LIB0110 ;0120 FPMAC0130 ;0140 .IF .NOT .DEF OSEQU0150 .ERROR "Must include OSEQU.LIB"0}160 .ENDIF 0170 ;0180 ; floating point macros0190 ;0200 ;0210 ; MACRO: @A2FP0220 ;0230 ; FORM: @A2FP inbuff024}0 ;0250 ; converts 10 byte or less0260 ; ascii number at inbuff to0270 ; FP number in FR00280 ;0290 .MACRO @A2FP 03}00 LDA # <%10310 STA INBUFF0320 LDA # >%10330 STA INBUFF+10340 LDA #00350 STA CIX0360 JSR A}FP ;[D800]0370 BCC @B10380 JMP FPERROR0390 @B1 NOP 0400 .ENDM 0410 ;0420 ;0430 ;0440 ; MACRO: @FP2A0}450 ;0460 ; FORM: @FP2A0470 ;0480 ; converts a FP number in FR0 to0490 ; ascii and places it in LBUFF0500 ; pointed to  }by INBUFF0510 ;0520 .MACRO @FP2A 0530 JSR FASC ;[D8E6]0540 .ENDM 0550 ;0560 ;0570 ;0580 ; MACRO: @FP2M }EM0590 ;0600 ; FORM: @FP2MEM buffer0610 ;0620 ; moves reslut of FP to ASCII0630 ; conversion to memory0640 ;0650  }.MACRO @FP2MEM 0660 LDA # <%10670 STA TO0680 LDA # >%10690 STA TO+10700 LDY #$FF0710 @LOOP INY 072 }0 LDA (INBUFF),Y0730 STA (TO),Y0740 CMP #$800750 BCS @LOOP0760 AND #$7F0770 STA (TO),Y0780  }INY 0790 LDA #$9B0800 STA (TO),Y0810 .ENDM 0820 ;0830 ;0840 ;0850 ; MACRO: @WRD2FP0860 ;0870 ; FORM: @W}RD2FP0880 ;0890 ; converts a two byte word in0900 ; FR0 to FP0910 ;0920 .MACRO @WRD2FP 0930 JSR IFP ;[D9AA]}0940 .ENDM 0950 ;0960 ;0970 ;0980 ; MACRO: @FP2WRD0990 ;1000 ; FORM: @FP2WRD1010 ;1020 ; converts a FP number i}n FR01030 ; to a two byte word1040 ;1050 .MACRO @FP2WRD 1060 JSR FPI ;[D9D2]1070 BCC @B11080 JMP FP}ERROR1090 @B1 NOP 1100 .ENDM 1110 ;1120 ;1130 ;1140 ; MACRO: @LODFR01150 ;1160 ; FORM: @LODFR0 buffer1170 ;118}0 ; loads FR0 with 10 byte ASCII1190 ; number at buffer1200 ;1210 .MACRO @LODFR0 1220 LDA # <%11230 STA FLPT}R1240 LDA # >%11250 STA FLPTR+11260 JSR FLD0P ;[DD8D]1270 .ENDM 1280 ;1290 ;1300 ;1310 ; MACRO: @LO}DFR11320 ;1330 ; FORM: @LODFR1 buffer1340 ;1350 ; loads FR1 with 10 byte ASCII1360 ; number at buffer1370 ;1380 .}MACRO @LODFR1 1390 LDA # <%11400 STA FLPTR1410 LDA # >%11420 STA FLPTR+11430 JSR FLD1P ;[DD9C]144}0 .ENDM 1450 ;1460 ;1470 ;1480 ; MACRO: @STFR01490 ;1500 ; FORM: @STFR0 buffer1510 ;1520 ; stores number in FR0 }to buffer1530 ;1540 .MACRO @STFR0 1550 LDA # <%11560 STA FLPTR1570 LDA # >%11580 STA FLPTR+11590 } JSR FSTOP ;[DDAB]1600 .ENDM 1610 ;1620 ;1630 ;1640 ; MACRO: @FR02FR11650 ;1660 ; FORM: @FR02FR11670 ;1680 }; moves FP number from FR0 to1690 ; FR11700 ;1710 .MACRO @FR02FR1 1720 JSR FMOVE ;[DDB6]1730 .ENDM 1740 ;}1750 ;1760 ;1770 ; MACRO: @MATH1780 ;1790 ; FORM: @MATH op addr,buffer1,buffer2 [,buffer3]1800 ;1810 ; performs FP ma}th function as1820 ; called by other FP macros with1830 ; result to buffer 3 if no1840 ; buffer 3 is specified the1850} ; result is stored in buffer 11860 ;1870 .MACRO @MATH 1880 @A2FP %31890 @FR02FR1 1900 @A2FP %219}10 JSR %1 ; FP operation addr1920 BCC @B11930 JMP FPERROR1940 @B1 @FP2A 1950 .IF %0<41960 }@FP2MEM %21970 .ELSE 1980 @FP2MEM %41990 .ENDIF 2000 .ENDM 2010 ;2020 ;2030 ;2040 ; MACRO: A}DD2050 ;2060 ; FORM: ADD buffer1,buffer2 [,buffer3]2070 ;2080 ; adds buffers 1 and 22090 ; uses the macro @MATH2100 ;  }see @MATH for details2110 ;2120 .MACRO ADD 2130 .IF %0=22140 @MATH FADD,%1,%22150 .ELSE 2160 !} @MATH FADD,%1,%2,%32170 .ENDIF 2180 .ENDM 2190 ;2200 ;2210 ;2220 ; MACRO: SUB2230 ;2240 ; FORM: SUB (a"}s in ADD)2250 ;2260 ; subtracts buffer2 from buffer12270 ; see @MATH for details2280 ;2290 .MACRO SUB 2300 .IF #}%0=22310 @MATH FSUB,%1,%22320 .ELSE 2330 @MATH FSUB,%1,%1,%32340 .ENDIF 2350 .ENDM 2360$} ;2370 ;2380 ;2390 ; MACRO: MUL2400 ;2410 ; FORM: MUL (as in ADD)2420 ;2430 ; multiplies buffer1 by buffer22440 ; se%}e @MATH for details2450 ;2460 .MACRO MUL 2470 .IF %0=22480 @MATH FMUL,%1,%22490 .ELSE 2500 &} @MATH FMUL,%1,%1,%32510 .ENDIF 2520 .ENDM 2530 ;2540 ;2550 ;2560 ; MACRO: DIV2570 ;2580 ; FORM: DIV (as '}in ADD)2590 ;2600 ; divides buffer1 by buffer22610 ; see @MATH for details2620 ;2630 .MACRO DIV 2640 .IF %0=22(}650 @MATH FDIV,%1,%22660 .ELSE 2670 @MATH FDIV,%1,%1,%32680 .ENDIF 2690 .ENDM 2700 ;271)}0 ;2720 ;2730 ; MACRO: LOG2740 ;2750 ; FORM: LOG buffer1 [,buffer2]2760 ;2770 ; takes the natural logarithm2780 ; of *}buffer1 and stores it in2790 ; buffer2 if no buffer2 is2800 ; specified then the result is2810 ; put back in buffer1282+}0 ;2830 .MACRO LOG 2840 @A2FP %12850 JSR LOG ;[DECD]2860 .IF %0=22870 @FP2MEM %22880 ,} .ELSE 2890 @FP2MEM %12900 .ENDIF 2910 .ENDM 2920 ;2930 ;2940 ;2950 ; MACRO: CLOG2960 ;2970 ; FO-}RM: CLOG buffer1 [,buffer2]2980 ;2990 ; takes the base 10 logarithm3000 ; of buffer1 as in LOG3010 ;3020 .MACRO CLOG.} 3030 @A2FP %13040 JSR LOG10 ;[DED1]3050 .IF %0=23060 @FP2MEM %23070 .ELSE 3080 @F/}P2MEM %13090 .ENDIF 3100 .ENDM 3110 ;3120 ;3130 ;3140 ; MACRO: LET3150 ;3160 ; FORM: LET label,string3170}0 ;3180 ; asigns a string or floating3190 ; point number to a label3200 ; FP numbers are up to 10 bytes3210 ; either must1} be in quotes3220 ;3230 .MACRO LET 3240 SAVEPC =*3250 *= %13260 .BYTE %23270 *= SAVEPC3280 2} .ENDM 3290 ;3300 ;3310 ;ACRO LET 3240 SAVEPC =*3250 *= %13260 .BYTE %23270 *= SAVEPC3280  0100 ; GRAFMAC.LIB0110 ;0120 GRAFMAC0130 ;0140 .IF .NOT .DEF CIOMAC0150 .ERROR "must include CIOM4}AC.LIB"0160 .ENDIF 0170 ;0180 ; GRAPHICS MACROS0190 ;0200 ; REQUIRES CIOMAC.LIB0210 ;0220 ;0230 ;0240 ; MACRO:5} GRAPHICS0250 ;0260 ; FORM: GRAPHICS mode0270 ;0280 ; enters a graphics mode as in0290 ; BASIC0300 ;0310 .MACRO G6}RAPHICS 0320 .IF %1>310330 LDY #00340 @LOOP LDA PCOLR0,Y0350 PHA 0360 INY 0370 CPY #90380 7} BNE @LOOP0390 .ENDIF 0400 @LA %10410 AND #$F00420 EOR #$10 ;COMP S IN AUX10430 ORA #$0C8}0440 STA TEMP0450 @LA %10460 AND #$0F0470 STA TEMP+10480 .IF %1>00490 CLOSE 60500 9} OPEN 6,TEMP,TEMP+1,"S:"0510 .ELSE 0520 CLOSE 00530 OPEN 0,12,0,"E:"0540 .ENDIF 0550 .I:}F %1>310560 LDY #00570 @LOOP2 PLA 0580 STA PCOLR0,Y0590 INY 0600 CPY #90610 BNE @LOOP206;}20 .ENDIF 0630 .ENDM 0640 ;0650 .MACRO GR 0660 GRAPHICS %10670 .ENDM 0680 ;0690 ;0700 ; MACRO<}: COLOR0710 ;0720 ; FORM: COLOR data0730 ;0740 ; selects color register as in0750 ; BASIC color statement0760 ;0770 =} .MACRO COLOR 0780 @LA %10790 STA COLOR0800 .ENDM 0810 ;0820 ;0830 ;0840 ; MACRO: PLOT0850 ;0860 ; >}FORM: PLOT X,Y0870 ;0880 ; same as BASIC plot0890 ;0900 .MACRO PLOT 0910 .IF %1<3200920 LDA # <%10930 ?} STA COLCRS0940 LDA # >%10950 STA COLCRS+10960 .ELSE 0970 LDA %10980 STA COLCRS0990 @} LDA %1+11000 STA COLCRS+11010 .ENDIF 1020 @LA %21030 STA ROWCRS1040 LDA COLOR1050 STAA} ATACHR1060 BPUT 6,ATACHR,11070 .ENDM 1080 ;1090 ;1100 ;1110 ; MACRO: DRAWTO1120 ;1130 ; FORM: DRAWTO X,YB}1140 ;1150 ; same as basic drawto1160 ;1170 .MACRO DRAWTO 1180 .IF %1<3201190 LDA # <%11200 STA COLC}CRS1210 LDA # >%11220 STA COLCRS+11230 .ELSE 1240 LDA %11250 STA COLCRS1260 LDA %1+D}11270 STA COLCRS+11280 .ENDIF 1290 @LA %21300 STA ROWCRS1310 LDA COLOR1320 STA ATACHR133E}0 LDX #61340 LDA ICAX1,X1350 STA TEMP1360 LDA ICAX2,X1370 STA TEMP+11380 XIO $11,6,TEMP,TEMP+1F},"S:"1390 .ENDM 1400 ;1410 .MACRO DR 1420 DRAWTO %1,%21430 .ENDM 1440 ;1450 ;1460 ; MACRO: SETCOLORG}1470 ;1480 ; FORM: SETCOLOR color,hue,lum1490 ;1500 ; same as BASIC setcolor command1510 ;1520 .MACRO SETCOLOR 15H}30 @LA %11540 TAY 1550 @LA %21560 ASL A1570 ASL A1580 ASL A1590 ASL A1600 .IF %3<1I}61610 ORA #%31620 .ELSE 1630 ORA %31640 .ENDIF 1650 TAX 1660 LDA DINDEX1670 CMP #9J}1680 BEQ @B11690 INY 1700 INY 1710 INY 1720 INY 1730 @B1 TXA 1740 STA PCOLR0,Y1750 .ENDM K}1760 ;1770 .MACRO SE 1780 SETCOLOR %1,%2,%31790 .ENDM 1800 ;1810 ;1820 ; MACRO: TPOS1830 ;1840 ; FORML}: TPOS X,Y1850 ;1860 ; position for text window1870 ;1880 .MACRO TPOS 1890 .IF %2<20 .OR %2>231900 .ERRORM} "TPOS cursor out of range"1910 .ENDIF 1920 @LA #%11930 STA TXTCOL1940 @LA #%21950 N} STA TXTROW1960 .ENDM 1970 ;1980 ;1990 ;2000 ; MACRO: LOCATE2010 ;2020 ; FORM: LOCATE X,Y2030 ;2040 ; same as BO}ASIC LOCATE except2050 ; color data is put in2060 ; ATACHR2070 ;2080 .MACRO LOCATE 2090 .IF %1<3202100 LDP}A # <%12110 STA COLCRS2120 LDA # >%12130 STA COLCRS+12140 .ELSE 2150 LDA %12160 STAQ} COLCRS2170 LDA %1+12180 STA COLCRS+12190 .ENDIF 2200 @LA %22210 STA ROWCRS2220 BGET R}6,ATACHR,12230 .ENDM 2240 ;2250 ;2260 ;S+12190 .ENDIF 2200 @LA %22210 STA ROWCRS2220 BGET 0 MAC65 MACRO LIBRARY =================== Included is a macro library for MAC65. These macroes performT} many functions with Atari-BASIC- like commands. Enter these files into MAC65 then save them to convert them to the pU}roper format. To follow traditional protocol, rename the saved version of OSEQU.LST to OSEQU.M65. When using the macV}roes do not use the pound symbol (#) before channel numbers. Otherwise the macro calls are identical to the equivaleW}nt BASIC commands. NOTE: The macroes are not fully tested. Some have never been tested. --------------------------X}------- If you find these macroes useful, a voluntary payment of $1.50 is requested. I will give any technical suppY}ort I can to those who have paid this fee and include a S.A.S.E. with their questions. Write to: Bob DuHamel 6915Z} Casselberry Way San Diego, CA 92119fee and include a S.A.S.E. with their questions. Write to: Bob DuHamel 6915(Pp6HHӮUhhi B' )`A'B') A'A')  A'`HHӮU@'hh`%!\}i B' )`A'B') A'A') A'`@'`&i B' )`A'B') A'A'U A'`@'` B VB\D'E!]}JK VL!BH I VK!BHI VL!K! L!L!BHI VO!!^}BHI VP!BHI VS!BHI VT!S!8O!K!T!P!L!K!iK!L!BK!HL!IO!DP!E V!_} E!BHI VO!BHI V! VP!L!O!LX P!LX L.  B V E!!`} H!Lll!!L`_&&L`&x& 66'7`ԩ5'4'X` 0 ɟ IH Ҭ5'!a}d5'ș&Mh+h@4'A'V_&h@'(D:CONFIG1.SYSحQL+(L(L)L{*L*hhh@UW8W!b}0XUV1*5'4'4'5'x4'x &Lr(5'4'_&UM_&hhh@_WPUi yAh!c}hhh&H`HHHHHQhhh@@@@B()@CDE3BUV00B11B!d}BɽBBUUR SSRUgTUUQhhh@Ui OUV@@!e}@B@CDE3BVU)*ɽBBVU0BBTZU OT!f},:L@@@3l@ @@!L@׍@!@L@`@&@Qhhh@E!L*L*TE!U OL@׍@!!g}@Qhhh@Ui OyTThhhh@HHHHHHL*A*+U }QlJ'Ӎ@'wo,p@ c& !q}B%DOS SYSB*)DUP SYSB/SCIOMAC LIBBJDUD DOCB7DUD OBJB0FPMAC LIBB 3GRAFMAC LIBBSMACROES DOCB%[MTOS COMB2MTOS DOCB+MTOSXE COMB.OSEQU LSTBePROBJ DOCBCyPROBJ OBJBSOUNDMACLIB 'j B VBtD,E JK VUi O@ABCDEںyUU U'jL!+!r}UV O'j B VBtD,E JK V$J'%K'+v,( \R BXDBEHI V B!s}DBEHI VVUT BDBEHI VVUT BDBEHI VL DE:@@This is just a sa!t}mple version of MTOS. If you would like to order the full featured version (see details of feat- ures in documentation)!u}, and become a registered user (see documentation for the benefits), send check or money orderin the amoun@At of $15.00!v} to: DATAQUE 3308 PARK AVE. W. P.O.BOX 134 !w} ONTARIO, OH 44862 This is a special introductory price, current only until MarchAB, 198!x}8! (press a key) } M.ulti-T.asking O.perating S.yst!y}em (C) Copyright 1988 Tom Hunt MTOS is licensed to DATAQUE Sample ver.1.1 B!z}C Job # Status Priority Type Active Inactive M.L. BASIC TEST LOOP1-Add job 2-View job 3-DetailsAD!{}D JOB VIEW JOBView which job===================>Add which job type- 1)M.L. 2)BASICHow many clocks assigned to job==> !|} CD VUT>'>'i0H BHIh V BDCEHI V>'g! B"!}}DCE HI V B+DCE HI V>'_i0H BHIh V BDCEHI V>'g)F!~} DEB=DCE HI V? B+DCE HI V B4DCE HI V䩛H BHIh V!}>'>'L DVU T BODCEHI VVU T BDCE HI VL DVU T B!}DCE&HEFI VVU TBuD'EHI VVU T BDCE&HI Vu'ɛL D80!}LHRL DVU T BnDCEHI VVUT BDCE"HI VBuD'EHI V!}VU T BFGDCE&HI Vu'ɛL D80LGL DLGRgVU T BFDCE HI !}VVUT BĝDCE"HI VBuD'EHI VVUT BDCE&HI Vu'ɛL D8!}0R_WRgSL DLHGHRgVU T B=DCE HI VVUT BĝDCE"HI V!}BuD'EHI VVUT BDCE&HI Vu'ɛL D80R_WRgSL DL_IVU T B!}wDCEHI VVUTHI BDCE"HI VBuD'EHI VVUT BDCE!}&HI Vu'ɛL D80 RVL DL DLI}H BHIh V BD@EXHI VL+L D!}**HI Vu'ɛL D80 RVL DL DLI}H BHIh V BD@EXHI VL+L D  _________________________________ MTOS (C) 1988 SAMPLER by Tom Hunt MTOSXE = 128K XE version%} MTOS = 256K+ XL/XE version _________________________________ MTOS is a revolutionary new Operating System syste%}m shell for Atari XL/XE computers with 128K or more of internal memory. This is a MTOS sampler with some of it's most%} important features installed. The features of this sampler are as follows: * ALLOWS MULTITASKING OF 2 BASIC USER %}PROGRAMS * ATARI DOS 2.5 COMPATABLE * SUPPORTS GRAPHICS MODES 0-6 _________________________________ GETT%}ING STARTED WITH THE MTOS SAMPLER --------------------- Copy MTOS.COM OR MTOSXE.COM onto an Atari dos 2.5 %}disk that does not have any RAMDISK.COM on it. When this is done, turn off the computer for a few seconds, and turn i%}t back on, with the disk you just created in D1: drive. Boot without holding down the option key (BASIC enabled). It %} is suggested that RAMDISK.COM is not on the dos boot disk, since MTOS uses the extended banks, and any files in your r%}amdisk might get corrupted. Type "DOS" from BASIC's "READY" prompt. When you get to the DUP.SYS menu, type "L" for BI%}Nary load. At the next prompt (for the filename,) type "MTOS.COM" or "MTOSXE.COM". After MTOS is done loading, you shou%}ld be looking at the Executor (aka Exec, task-manager) screen. You can now initialize 2 user tasks, which in this sam%}pler, is limited to BASIC. To attach (view) a task, choose the "view" option, choosing from the list of active tasks%}. You are limited to two user defined tasks in the MTOS.COM sampler. The 128k XE version MTOSXE.COM supports 3 user t%}asks. The remainder of tasks are non-existant in this sampler version of MTOS. If you followed the above instructions,%} you should be looking at BASIC's familiar "READY" prompt. To detach from a task, just plug your joystick in to the se%}cond joystick port, and press the fire button. You will automatically reattach to Exec. ___________________________%}______ MTOS stands for M.ulti-T.asking O.perating S.ystem. It is more properly called a shell, since it works with %}your DOS and the Atari O.S. Rom. It offers the Atari 8-bit owner a new dimension of computer enjoyment - the ability %}to run more than one program at one time! I have designed MTOS to place as few constraints on people wanting to write p%}rograms that will run under MTOS as possible. There are a few constraints, however. Your programs simply have to b%}e "well behaved" in that they can't indescriminately go poking around in memory, since our CPU doesn't support protecte%}d modes. In other words, don't expect your boot games to run under M.T.O.S. Also, user programs are limited to 16K.%} _________________________________ Here are the features supported by the full implementation of MTOS, which can be%} purchased from the address given at the end of this file: * PREEMPTIVE MULTITASKING * ALLOWS MULTITASKING OF: %} - 6 TASKS (256k+ XL/XE version) - 4 TASKS (128k XE version) * (LIMITED) SUPPORT OF SpartaDOS: -COMMAND PROCESSOR%} -BATCH FILES -BINARY LOAD * BINARY LOAD FROM THE EXECUTOR * SUPPORTS INTERMIXED BINARY AND BASIC PROGRAMS%} * SUPPORTS LOCALIZED CUSTOM CHARACTER SETS * SUPPORTS LOCALIZED SCREEN COLOR VARIABLES * SUPPORTS ALL GRAPHI%}CS MODES (ALLOWS ONE HI-RES TASK, WITH THE REMAINDER TASKS USING LESSER MEMORY INTENSIVE GRAPHICS MODES) *%} SUPPORTS THE ABILITY TO CHANGE TASK PRIORITY FROM THE EXEC LEVEL * EXTENSIVE DOCUMENTATION THAT ALLOWS THE MT%}OS PROGRAMMER ACCESS TO: - SYSTEM VARIABLES - PRIORITY SCHEDULING * SAMPLE BASIC PROGRAMS * PAGE 6 OF MEMO%}RY FREE FOR USER PROGRAMS * HIERARCHICAL FILE SYSTEM (ALLOWS FOR SIMULTANEOUS FILE ACCESS) * 100% MACHINE L%}ANGUAGE * MINIMAL SYSTEM OVERHEAD * PAGES 0-5 OF MEMORY AVAILABLE TO M.L. PROGRAMMERS FOR EACH TASK _______%}__________________________ There are two support BBS's for registered owners of MTOS, where upgrades, patches, and en%}d user application programs will be made available. Technical questions from registered users will be answered within%} 48 hours on the BBS. We intend to enhance MTOS and support it's users. __________________________________ **********%}************************ PROJECTED ENHANCEMENTS TO MTOS ------------------------------ * A TOOLKIT FOR MTOS APPLI%}CATION PROGRAMMING * INTERTASK COMMUNICATION (WITH TASKS APPEARING AS FILES TO EACH OTHER) * MTOS FILE SERV%}ER * SUPPORT OF HI RES GRAPHIC MODES * SUPPORT FOR THE 280k (Axlon upgrade) ATARI 800 __________________________%}_______ AND NEW PRODUCTS (no release date) _________________________________ * A SWITCHER THAT AL%}LOWS 3 VIRTUAL COMPUTER SYSTEMS TO RESIDE IN MEMORY AT ONE TIME (256K+): - EACH OF WHICH CAN BE CONFIG%}URED FOR A DIFFERENT DOS - EACH IS A "SNAPSHOT" OF SYSTEM MEMORY/CONFIGURATION - INSTANTANEOUSLY SWITCHAB%}LE WITH A SHIFT-CONTROL KEY COMBINATION # The BASIC Programmers Pal (r) Six-Pac of POP-UP Hidden Softw%}are Tools! # Conversion Table (Atascii, Icode, Mnemonic, Hex, Decimal) # Current BASIC Pointer Values, Disk Se%}ctor/Directory Reader # Calculator (Hex, Decimal [16-bit], Add, Sub, Mul, Div, And, Or, Xor) # OS Register Valu%}es, Disassembler, Memory Peeker _________________________________ ********************************* MTOS or MTOS%}XE version 1.1 is now avalable for a special low introductory price of only $15.00 which is current until March '88! %} MTOS or MTOSXE version 1.1 can be ordered by sending $15.00 in check or money order to: DATAQUE %} 3308 PARK AVE. W. P.O.BOX 134 ONTARIO, OH. U.S.A. 44862 _____________________________%}____ ********************************* ONTARIO, OH. U.S.A. 44862 _____________________________$*Pp:HHӮUhh P' )`O'P') O'O')  O'`HHӮUN'hh)}`) P' )`O'P') O'O') O'`N'`, P' )`O'P') O'O'U) O'`N'` B V)}BjD'EJK VL(! BHI VY!BHI VZ!Y! Z!L(!BH)}I V]!BHI V^!BHI Va!BHI Vb!a!8]!Y!b!^!Z!Y!iY!Z!BY!HZ!I)}]!D^!E V S!BHI V]! d!BHI V^!L(!]!Lf ^!Lf L<  B V)} S! V!Lll!!L`m&&Ln&x& D6'7`ԩC'B'X` 0 ɟ I)}H ҬC'dC'ș&Mh+h@B'O'Vm&h@'(D:CONFIG1.SYSحQL9(L )L*L,L-hh)}h@UY8Y0XUV1*C'B'B'C'xB'x &L(C'B'm&UMm&hhh@aYPUi )}UyUL(L(L(AL(GL(Mhhhh()&HnHHHHHQhhh@UL)L)L!*@)}@@B@CDE3BUV00B11BBɽBBL*F)}FFBFIJK3HUV0)*0H11HHɽHHL*)}LLLBLOPQ3NUV00N11NNɽNN)}UUR SSRUiTUUQhhh@Ui SUVU*+L*Lg+L+@@@B)}@CDE3BVUɽBBL:,FFFBFI)}JK3HVUɽHHL:,LLL+,BLOPQ)}3NVUɽNNVU90U&NNL{,HHL{,BBTZU ST)},:L@@@3l@ @@!L@@!@L@n@&@Qhhh@S!L,--L -TS!U SL@)}@!@Qhhh@Ui SUyTThhhh@HHHHHHL{-ULT-Lb-Lp-AL{-GL{-MU )}QlX'ӍN'W/X@ q& (j B VBD/E JK V-.Ui SL---)}-R@ABCDEL~.FGHIJKL~.LMNOPQ)}L~.UyUU U (jL-UV S (j B VBD/E JK V$X'%./Y' ө()} \R BXDBEHI V BDBEHI VVUT BDBEHI VVUT B)}DBEHI VL DE:@@This is just a sample version of MTOS. If you would like to order the full featured version )}(see details of feat- ures in documentation), and become a registered user (see documentation for the benefits), send ch)}eck or money orderin the amoun@At of $15.00 to: DATAQUE 3308 PARK AV)}E. W. P.O.BOX 134 ONTARIO, OH 44862 This is a special introducto)}ry price, current only until MarchAB, 1988! (press a key) )} } M.ulti-T.asking O.perating S.ystem (C) Copyright 1988 Tom Hunt MTOS is licensed to DATAQU)}E Sample ver.1.1 BC Job # Status Priority Type Active Inactive M.L. BASIC )} TEST LOOP1-Add job 2-View job 3-DetailsADD JOB VIEW JOBView which job===================>Add which job type- 1)M.L. 2)B)}ASICHow many clocks assigned to job==> CD VUTL'L'i0H BHIh V)} BDCEHI VL'i! B"DCE HI V B+DCE HI VL'ai0H BHIh)} V BDCEHI VL'i)F DEB=DCE HI V? B+DCE HI V B)}4DCE HI V䩛H BHIh VL'L'L DVU T BODCEHI VVU T BDC)}E HI VL DVU T BDCE&HEFI VVU TBD'EHI VVU T)} BDCE&HI V䭃'ɛL D80LHRL DVU T BnDCEHI VVUT BDC)}E"HI VBD'EHI VVU T BFGDCE&HI V䭃'ɛL D80LGL DLG)}RiVU T BFDCE HI VVUT BĝDCE"HI VBD'EHI VVU)}T BDCE&HI V䭃'ɛL D80RaYRiSL DLHGHRiVU T B=DCE HI V)}VUT BĝDCE"HI VBD'EHI VVUT BDCE&HI V䭃'ɛL D80R)}aYRiSL DL_IVU T BwDCEHI VVUTHI BDCE"HI VBD)}'EHI VVUT BDCE&HI V䭃'ɛL D80 RVL DL DLI}H BHIh V B)}D@EXHI VL.L D-HI V䭃'ɛL D80 RVL DL DLI}H BHIh V B(.0100 ; OSEQU.M650110 ;0120 OSEQU0130 ;0140 ;USEFUL OPERATING SYSTEM EQUATES0150 ;INCLUDING FMS AND SOME GENERA-}L 0131 ;PROGRAM EQUATES0160 ;0170 ;0180 ;CIO BYTE VALUES0190 ;0200 OPEN = $030210 OREAD = $040220 GETREC = $050230 -}ODIR = $060240 GETCHR = $070250 OWRITE = $080260 PUTREC = $090270 APPEND = $090280 PUTCHR = $0B0290 CLOSE = $0C0300 O-}UPDATE = $0C0310 STATUS = $0D0320 RENAME = $200330 DELETE = $210340 DFRMAT = $21 ;RESIDENT DISK HANDLER (RDH)0350 LOC-}K = $230360 UNLOCK = $240370 POINT = $250380 NOTE = $260390 PTSECT = $50 ;RDH0400 GTSECT = $52 ; |0410 DSTAT = -}$53 ; |0420 PSECTV = $57 ;RDH0430 NOIRG = $800440 EOL = $9B0450 ;0460 ;OS VARIABLES0470 ;0480 ;PAGE 00490 ;-}0500 CASINI = $020510 WARMST = $080520 DOSVEC = $0A0530 DOSINI = $0C0540 APPMHI = $0E ;DIS LOW LIMIT,20550 POKMSK = $-}10 ;IRQ ENABLE FLAGS0560 BRKKEY = $11 ;FLAG0570 RTCLOK = $12 ;,3 +2=LSB0580 ZIOCB = $20 ;ZERO PAGE IOCB0590-} SOUNDR = $41 ;0=QUIET I/O0600 CRITIC = $42 ;NO VVBLKD FLAG0610 DSTAT = $4C ;DISPLAY STATUS0620 ATRACT = $4D063-}0 LMARGN = $520640 RMARGN = $530650 ROWCRS = $540660 COLCRS = $550670 DINDEX = $57 ;DISPLAY MODE0680 SAVMSC = $58 -};SCREEN ADR0690 OLDROW = $5A ;BEFORE DRAW/FILL0700 OLDCOL = $5B ;SCREEN ADR0710 OLDADR = $5E ;CURSOR ADDRESS0720-} PALNTS = $62 ;PAL/NTSB FLAG0730 RAMTOP = $6A ;END OF DIS +10740 ZROFRE = $80 ;USER ZERO PAGE0750 ;TO - $D307-}60 ;FP - $D4 ;FREE IF NO0770 ;TO - $FF ;FLOATING POINT0780 ;0790 ;PAGE 1 STACK0800 ;0810 ;PAGE 20820 ;083-}0 VDSLST = $0200 ;NMI VECTOR0840 VBREAK = $02060850 VKEYBD = $02080860 VVBLKI = $02220870 VVBLKD = $02240880 SDMCTL = $-}022F0890 SDLSTL = $02300900 LPENH = $0234 ;LIGHT PEN0910 LPENV = $02350920 DFLAGS = $0240 ;DISK FLAG BYTE0930 PADDL0 -}= $02700940 GPRIOR = $026F0950 GTIA = $026F0960 STICK0 = $02780970 STRIG0 = $02840980 TXTROW = $02900990 TXTMSC = $029-}41000 TXTCOL = $02911010 INVFLG = $02B61020 SHFLOC = $02BE1030 BOTSCR = $02BF1040 PCOLR0 = $02C01050 COLOR0 = $02C4106-}0 RAMSIZ = $02E4 ;START OF ROM1070 KRPDER = $02D9 ;REPEAT DELAY1080 KEYREP = $02DA ;REPEAT RATE1090 NOCLIK = $02DB ;CL-}ICK DISABLE1100 HELPFG = $02DC ;HELP KEY FLAG1110 GLBABS = $02E0 ;GLOBAL VARIABLES1120 RUNADR = $02E0 ;DISK RUN POINTER-}1130 INIADR = $02E2 ;DISK INIT POINT1140 RAMSIZ = $02E4 ;START OF ROM1150 MEMTOP = $02E5 ;END OF FREE RAM1160 MEMLO = -}$02E71170 CRSINH = $02F01180 KEYDEL = $02F1 ;KEY DELAY & RATE1190 CHACT = $02F31200 CHBAS = $02F41210 ATACHR = $02FB12-}20 CH = $02FC1230 FILDAT = $02FC1240 DSPFLG = $02FE1250 SSFLAG = $02FF1260 ;1270 ;PAGE 31280 ;1290 ;RESIDENT DISK H-}ANDLER & SIO INTERFACE1300 ;1310 DDEVIC = $03001320 DUNIT = $03011330 DCOMND = $03021340 DSTATS = $03031350 DBUFLO = $0-}3041360 DBUFHI = $03051370 DTIMLO = $03061380 DBYTLO = $03081390 DBYTHI = $03091400 DAUX1 = $030A1410 DAUX2 = $030B142-}0 ;1430 ;IOCB's1440 ;1450 ICHID = $03401460 ICDNO = $03411470 ICCOM = $03421480 ICSTA = $03431490 ICBAL = $03441500 I-}CBAH = $03451510 ICPTL = $03461520 ICPTH = $03471530 ICBLL = $03481540 ICBLH = $03491550 ICAX1 = $034A1560 ICAX2 = $034.}B1570 ICAX3 = $034C1580 ICAX4 = $034D1590 ICAX5 = $034E1600 ICAX6 = $034F1610 ;TO - $03BF ;OTHER IOCB's1620 PRNBUF .}= $03C01630 ;TO - $O3E71640 ;SPARE - $03E81650 ;TO - $03FC1660 CASBUF = $03FD ;CASSETTE BUFFER1670 ;1680 ;PAGE 4.}1690 ;1700 ;TO - $047F ;CASBUF CONT.1710 USAREA = $0480 ;FREE1720 ;TO - $04FF1730 ;1740 ;PAGE 51750 ;1760 PAG.}E5 = $0500 ;FREE1770 ;TO - $057D1780 ;FP ONLY $057E ;FREE IF NO1790 ;TO - $05FF ;FLOATING POINT1800 ;1810 ;PAG.}E 61820 ;1830 PAGE6 = $0600 ;FREE1840 ;TO - $06FF1850 ;1860 ;PAGE 71870 ;1880 BOOTRG = $0700 ;PROGRAM AREA1890 ;.}1900 ;1910 ;UPPER ADDRESSES1920 ;1930 ;1940 RITCAR = $8000 ;RAM IF NO1950 LFTCAR = $A000 ;CARTRIDGE1960 C0PAGE = $C0.}00 ;EMPTY IN 8001970 ;TO - $CFFF1980 ;1990 ;HARDWARE REGISTERS2000 ;2010 HPOSP0 = $D0002020 M0PF = $D0002030 SIZE.}P0 = $D0082040 M0PL = $D0082050 SIZEM = $D00C2060 GRAFP0 = $D00D2070 GRAFM = $D0112080 COLPM0 = $D0122090 COLPF0 = $D0.}162100 PRIOR = $D01B2110 GTIAR = $D01B2120 VDELAY = $D01C2130 GRACTL = $D01D2140 HITCLR = $D01E2150 CONSOL = $D01F2160. } AUDF1 = $D2002170 AUDC1 = $D2012180 AUDCTL = $D2082190 RANDOM = $D20A2200 IRQEN = $D20E2210 SKCTL = $D20F2220 PORTA = . }$D3002230 PORTB = $D3012240 PACTL = $D3022250 PBCTL = $D3032260 DLISTL = $D4022270 HSCROL = $D4042280 VSCROL = $D40522. }90 CHBASE = $D4092300 WSYNC = $D40A2310 VCOUNT = $D40B2320 NMIEN = $D40E2330 ;2340 ;FLOATING POINT MATH ROUTINES2350 ;. }2360 AFP = $D8002370 FASC = $D8E62380 IFP = $D9AA2390 FPI = $D9D22400 ZFR0 = $DA442410 ZF1 = $DA462420 FSUB =. } $DA602430 FADD = $DA662440 FMUL = $DADB2450 FDIV = $DB282460 PLYEVL = $DD402470 FLD0R = $DD892480 FLD0P = $DD8D24.}90 FLD1R = $DD982500 FLD1P = $DD9C2510 FSTOR = $DDA72520 FSTOP = $DDAB2530 FMOVE = $DDB62540 EXP = $DDC02550 EXP10 = .}$DDCC2560 LOG = $DECD2570 LOG10 = $DED12580 ;2590 ;2600 ;OPERATING SYSTEM2610 ;2620 ;2630 CHORG = $E000 ;CHARACTE.}R SET2640 ;TO - $E3FF2650 ;2660 ;ROM VECTORS2670 ;2680 DSKINV = $E4532690 CIOV = $E4562700 SIOV = $E4592710 SYSVB.}V = $E45F2720 VBIVAL = $E460 ;ADR AT VVBLKI2730 XITVBV = $E4622740 VBIXVL = $E463 ;ADR AT VVBLKD2750 BLKBDV = $E471276.}0 WARMSV = $E4742770 COLDSV = $E4772780 ;2790 ;2800 ;GENERAL PROGRAM EQUATES2810 ;2820 COLOR = $C8 ;USED BY BASIC2.}830 FROM = $CB2840 TO = $CD2850 ZPBYTE = $CF2860 ZPWORD = $D02870 TEMP = $04802820 COLOR = $C8 ;USED BY BASIC2,X PROBJ 1.0 PRocess OBJect (Load) files. Compiled in ACTION!(tm) (c)1984 John Navas II No comme2}rcial use without permission. OVERVIEW: PROBJ is a general purpose utility for processing Atari DOS object Load f2}iles. It's principal capabilities are: * To produce a RAM address map of the segments in the load file, together2} with the disk address of the start of each segment. * To produce a new load file with contiguous segments 2}"compressed" into a longer segment (which can save disk space and speed loading). * To allow one or more segmen2}t(s) to be deleted from the new load file. (Thus a single load file may be broken into pieces.) * To 2}ZAP (change) bytes in the new load file. (All changes are verified, allowing bytes to be examined even if no 2} changes are to be made.) MINIMUM SYSTEM REQUIREMENTS: * 24K RAM (48-64K is preferred). * Disk Drive. FEATU2}RES: * PROBJ is in binary Load file form (to be run from DOS with OR WITHOUT any cartridges). THIS MEANS THAT2} IT MUST BE DOWNLOADED WITH A PROGRAM SUPPORTING CIS ERROR-CHECKING, SUCH AS TSCOPE. * Dynamic buffer uses al2}l of available RAM (buffer size displayed). * Extensive error trapping. * Accepts responses in upper or 2} lower case. * Interactive execution with helps and prompts. * RAM map may be directed to any valid file s2 }pecification. * RAM map identifies DOS initialize and run vectors. * Both RAM addresses and data displayed 2!}and accepted in hexadecimal format. * Disk addresses in decimal format. * Generation of the output file 2"} is optional. NOTES: * Loads in RAM at $3000 (12K). Program size is approximately 8K bytes. * Should w2#}ork with any compatible DOS and disk drives. * Will NOT accept tokenized Atari BASIC (Saved) programs. * Wi2$}ll not accept ATASCII text files.COMPRESSING OBJECT LOAD FILES: All DOS object load files must begin with a 2-by2%}te "header" of $FFFF. Since one load file can be Appended to another with DOS Copy, there can be unnecessary headers 2&}embedded in a file. PROBJ automatically removes embedded headers from any output file. An object load file consists of2'} one or more load segments. Each segment consists of two 2-byte addresses giving the beginning and ending RAM address2(} for the segment (in 6502 low-high byte format), followed by the data for that segment. Each time DOS encounters the 2)}end of one segment and the beginning of another segment, the extra processing required results in a delay long enough2*} for the disk drive to take an extra revolution. As a result, a file containing a number of short segments will Load mu2+}ch more slowly than a file of equal length consisting of a single segment. The problem is that some program devel2,}opment tools, most notably the Atari Macro Assembler, generate object files containing only short segments, even if the2-} segments load in contiguous RAM addresses. PROBJ will combine these contiguous segments into a longer segment (buff2.}er size permitting), creating a new file which should Load faster and may also save disk space by the elimination of 2/}unnecessary 2-byte addresses (and headers). GETTING STARTED: For maximum buffer size it is recommended that any ca20}rtridges be removed from your machine. However, adequate RAM should be available for most object load files even with21} a cartridge installed. (If a buffer error message is encountered with a cartridge installed during program execution22} on a 48-64K system, remove the cartridge and re-try the operation!) From your DOS menu, Load PROBJ.BIN (unless you'23}ve given it a different name). As soon as the program Loads, the following screen is displayed:**********************24}*************PROBJ 1.0 - Written in ACTION!(tm)(C)1984 John Navas IIInput must be a standard DOS objectLoad file. Outpu25}t will be a RAM mapand an optional compressed Loadfile.Individual segments may be removedfrom and bytes may be "ZAP" cha26}ngedin the output Load file.Buffer size = $hhhh*********************************** The actual buffer size appears in27} place of "hhhh". The buffer limits the maximum size of a compressed output object file segment (see "error messages"28} below). It also limits the maximum size of any input object file segment which can be processed; if an input segment 29}is encountered which exceeds the buffer, processing is abandoned with an error message (see below). PROBJ first asks2:}: FILE SPEC for RAM map? (E:) If you want your map to appear on your screen, merely press . You may direct 2;}it to your printer by typing P. In fact you may type any valid file specification (although interactive opera2<}tion can be difficult if the map is not visible!). If the file cannot be opened successfully, PROBJ responds "CANNOT 2=}OPEN FILE!" and prompts you to try again. If the file is opened to a device other than the screen editor (E:), a titl2>}e with the input file name will be placed before the map. Next PROBJ prompts you with: Input FILE SPEC? First, mak2?}e sure that the disk containing the input file is in your disk drive! Then type the file specification of the input f2@}ile you wish to process. (If your file is on disk drive #1, you may omit the "D:".) Again, you will get an error messag2A}e and be prompted to try again if the file cannot be opened. Next you will see: Output FILE SPEC? If you want on2B}ly a RAM map, and not an output file, merely press . Otherwise, first make sure that you have a disk in your2C} drive with sufficient room to accomodate the output file! Then type the file specification of the output file to be 2D}created. (If your file is on disk drive #1, you may omit the "D:".) Again, you will get an error message and be promp2E}ted to try again if the file cannot be opened. If (and only if) you are creating an output file, PROBJ will next g2F}ive the following two prompts: Remove output segments? (Y/N) ZAP (change) bytes? (Y/N) In each case, only press a key2G} to give your answer (do NOT press ). PROBJ will confirm your choice by displaying "YES" or "NO". Processing2H} now begins. PROBJ first looks for the DOS $FFFF header in the input file and abandons processing with an error mess2I}age if one is not found (see "error messages" below). Any time a DOS header is encountered, PROBJ will display: HEAD2J}ER AT SCTR 88, BYTE 99 88 and 99 will of course be replaced with the actual disk address (in decimal) of the first b2K}yte of the header. Any time a segment is encountered, PROBJ first checks to see if the segment is contiguous with the2L} last segment. If it is, PROBJ will display: CONTIGUOUS: Next, PROBJ will map the segment by displaying: SEG $h2M}hhh-$iiii AT SCTR 88, BYTE 99 $hhhh will be replaced with the actual beginning RAM address and $iiii will be replace2N}d with the actual ending RAM address. As before, 88 and 99 will be replaced with the actual disk address (in decimal)2O} of the first (low) byte of the first address. If the segment is contiguous, PROBJ then checks to see if it will fit 2P}in the remaining buffer space. If it won't, this particular segment won't be compressed, but processing will continue2Q} after the message: WON'T FIT IN BUFFER, CAN'T COMPRESS If the segment contained a DOS initialize and/or run vector2R}, the vector HEXADECIMAL address will be displayed on the map. (INITAD is the initialize address; RUNAD is the run ad2S}dress.) At the completion of successful processing, PROBJ displays the message: File processed OK! However, if a2T}n error occurred, PROBJ will display (in addition to the error message): PROCESSING FAILED! NOTE: Even though proce2U}ssing fails, PROBJ may still have created an output file, but the file will usually not be valid! Finally, PROBJ wil2V}l ask: Another file? (Y/N) As before, press a key (not ). If you press anything other than "Y", PROBJ will 2W}return to DOS. Note that if you continue with another file, the RAM map will continue to go to the file specified at 2X}the beginning of the program! Also note that the RAM map file is not CLOSEd until the end of the program, so be SURE to2Y} press "N" at the end of processing or a RAM map sent to disk will be lost! ZAPPING (CHANGING) BYTES: If you are2Z} creating an output file and have chosen to ZAP bytes, PROBJ will prompt you for the first RAM address (all addresses2[} must be processed in the order encountered in the input file!) with: ZAP address? (or RETURN) $ Press if 2\}you have no more addresses to ZAP. Otherwise, type the HEXADECIMAL address. (If you make an error, PROBJ will respond2]} "INVALID!" and give you another chance with "RE-TRY: $". Note that you do NOT need to type a "$"!). Once the address 2^}is located, PROBJ will allow you to verify the current contents of the location with: Verify: $h...h "h...h" will2_} be replaced by the HEXADECIMAL digits presently at that address. Then PROBJ will display: ZAP: $ (Note that t2`}he "$" is aligned with Verify for easy typing.) If you wish to make no (further) changes, merely press . (No2a}te that this is a handy way to DISPLAY ANY ADDRESS even if you don't want to make any changes!) Otherwise, type up to 2b}16 HEXADECIMAL digits. (If more bytes are to be ZAPped, you must enter another ZAP address!) As before, you will be n2c}otified and given another chance if you make an error. When the entry is correct, PROBJ will return to the "Verify" d2d}isplay so that you may verify your ZAP and make a further ZAP at the same address if desired. When your ZAP at that 2e}address is completed, PROBJ will prompt you for the next ZAP address. Enter the next address, even if it is not in the 2f}current segment! (PROBJ will remember the address and continue scanning.) DELETING SEGMENTS: If you are creating a2g}n output file and have chosen to delete segments, after each segment is mapped, PROBJ will ask: Remove this segment?2h} (Y/N) As usual, press only a key to indicate your answer (don't press ). PROBJ will confirm your answer by 2i}displaying "REMOVED!" or "NO". Note that the segment is only removed from the output file; the input file is left int2j}act! Of course, any ZAPs you have made in a removed segment are lost! ERROR MESSAGES: If PROBJ does not find a sta2k}ndard DOS $FFFF header at the beginning of the input file, processing is abandoned with the error message: NO DOS HE2l}ADER You may have typed an incorrect input file specification. Remember that PROBJ will not accept tokenized BASIC o2m}r text files. If PROBJ encounters an input segment which exceeds the buffer, processing is abandoned with the erro2n}r message: WON'T FIT IN BUFFER If any cartridges were installed on a 48-64K system, remove the cartridge and re-try2o} the operation. If a segment is encountered in which the ending RAM address is LESS than the beginning RAM address2p}, processing is abandoned with the error message immediately following the segment map: INVALID ADDRESS RANGE Be su2q}re that you are trying to process a valid object file! If you try to type more ZAP bytes (hexadecimal digits) than wil2r}l fit in the current segment, PROBJ will display: WON'T FIT! You will then be given another chance to enter ZAP b2s}ytes. If the input file is exhausted without locating your ZAP address, PROBJ will display: ZAP ADDRESS NOT FOUND!2t} Check to be sure that you are processing the correct file! If the input file ends other than at the normal end of a2u} segment or header, PROBJ will display: UNEXPECTED E-O-F AT SCTR 88, BYTE 99 As usual, 88 and 99 will be replaced2v} by the disk address (in decimal) where the end of file occurred. Check to be sure that you are processing the correct2w} file! If an unrecoverable I/O error occurs, PROBJ will display: I/O ERROR: 999 999 will be replaced by the Atari2x} DOS error code (in decimal). Refer to the Atari DOS manual for explanations and corrective action.aced by the Atari0l09Ph ih!iHH !"` *Ƅ`JjƄ`HhƣĢ`6z}ƥĤ`MD(0,IFL,15)00 FIXIT(IFL)0%0 Close(INO) Open(INO,IFL,4,0)00 IF ERR THEN06{}1 Close(INO)0031) PrintF("%CCANNOT OPEN FILE!%E",BUZZER)1E1 ELSE EXIT31 P1 FIE1 Z1 ODP1 d1 DOZ1r1 ERR=6|}0d1$1 Print("Output FILE SPEC?1$ I'd 1,1L1 0111ŤLS2 m1*(m16}}01Š1塰L281堍11塍1L1I0IILN2梠1e1iL111`pLj2 6~}0d2e2f2f2e2d2 1`egmeL2 02222222 1`PrinL2 0222逐L2226}L*3222i2i-2I22I2222222 1` LA3=3<3<3=3L36}<3=3<3=3I-L3ȄL3I L3L38L]3L40L49ťL4&&&ee806}ei8<3=3<3=3L3L*4II棥`IOL8444344434 >3` LQ4M4L4M4L4 >6}3`Ll4IL~4Ll4l \@Error: 4L444i4i4 g24i4i 4i4i 46}i4i4ȑ44i4iȑ V i4`EN EXIT L"5 055#####@e#5i55i5i56}5i5i5ȑ55i5i5ȑ5#5 V$5i5i##IL551L5#IL5# 4$`6}T FI5.6L5 055 @e5i55i 5i55i 5i55i5i5555 5` L6}U6Q6P6Q6 P6 5`ILw6s6s6 1 5`L6 1 5`L66 6 5`6L66} 066i6i66 6 5`staL 7 07777 67 6` FL(7$7#7$7#71 6`%HL@7<7;7<7;76}1 7`U%ELY7 0S70U7T7 20S7 6`TIOL7 0y7{7z7y7 V7y7 6`HEL777771 V7`ALL777771 |7`76}L77777 V7` L77777 |7`L777 7`NL 888 7` L8 08088 208 6` LB8 0<86}>8=8<8 8<8 6`R=L`8\8[8\8[81 8` ELx8t8s8t8s81 ?8`, CAN'T COMPRESS")x8L8 08 8888Ȍ886}L:888888L:8I%L8% t6L:8IL98888Ll98IL.98888Ll98ILG98886}8Ll98IL`98888Ll9888888IEL9 t6L:8ICL98 t6L:8ISL988 %7L:8IIL988 ]8L6}:8IUL988 7L:8IHL:$ t6͗88L98L:88͞8L: 88 8088.88.88.88.86}88 8ILy:88 Ll:8i0 t6Ly:8i7 t68L:8L:8I%L:8 t6L:Ȍ8888L8`EL::6}: 5`BUZZER):L: 0:::::::m::m:::i:i::: 5: 6}@e:i::::i:i8:m::m::` PL; 0;;;; :`ZCL;;;;;6}1 :`)L;;0; :0 >3`L;1 ;`IL;;; ;`L <1 ;` L<<< ;`L-<6}1 ;` ELL@< 08<:<;<<<9<8< 5` Lm>>=`CP^)=L> 0>6}>m>>m>8>>=> ==ILk>==`> ==IL>==`>>>> 6}==IL>==`X=L>>>>> ŠLJ?iLJ?>i>iIDLJ?>i>iI:*6}>i>iI:LJ?1LJ?4šLJ?>>L?>e>iaL?zšL?8 >e>6}i88LZ?L?>i>iD>i>i:`? L????????? :6}??J ELS@8??0ȄŦLALz@ILw@LA?e?i86}0L@9ţL@80L@AL@FţL@87L@aL@fţL@8WL@LAeLZ@IL A6}ILAL>A?e?iLS@ILZA??LA R6LmAINVALID!Ad 7LA RE-TRY: $Ay 6L6}@?i?iLA`LBILA`LB -0?i?iqi` ELLB 06}BBBLBBBBLLB)BB8BBLTBFFFF LnBi0 R6L|Bi7 R6BIBLB`6}LB :IY IyLBLBYESB =7LBLBNOB =7`>PROC LOOP()>BBYTE ARRAY MFL(16)B C BY6}TE R,O,TB+C=0LCB4>4= >4 >4=LPCInput FILE SPEC? C= %7Bԩ :B > j<Bԩ =<6}=LC j j<B =<=LMD j4=4 6BB C CCC1BB1BL6}EL E FILE: %S%E%EBԢD 8BC  <B ==ILlE===ILiEBI CILiE=LEBI C6}ILELEHEADER AT SCTR %U, BYTE %U%E CB CE 8=LELEBLEB C CLELE=LE NO DOS HEADERE6} =7LELE=L FLLCiCiBE CELBFL8F CONTIGUOUS:F, =7LyFBLqF C CLqF C CCC >=LqFL6}L C CC ==ILF=ILF=LF==LLLFSEG %H-%H AT SCTR %U, BYTE %U%ECCC C C6}BBF 8CBCCL=LGLL C C>m C C>m C CCC C C ==ILEH===ɀLEHLL8 CB C CC C=B >46} >4BL3JBILH=LHZAP address? (or RETURN) $H 6BB ?C C=LHBLHBLHBLH6} R6BIL0J CBCCL-JC CCCL-J8C CCCiCiCCCLJICC Cm CCCm CC6}=LoI Verify: $Ie 6CCC B R6LI ZAP: $I 6BB ?BB=L*JBLIBL*J8B Ce6}CiCŬC子LJ R6LJ WON'T FIT!I 7L*JBBCC l0L0JL3JLjHB=>4=4BCLJC6}CLJ CiC CiCLJ INITAD=%H%ECCJw 8BCLJCCLJ CiC CiCLJ 6} RUNAD=%H%ECCJ 8BLKL*KRemove this segment? (Y/N) K 6 :BBIY BIyLp6}KBLdKREMOVED!K[ 7LKBL{KNOKx 7LKȌBBL L C CLKBLKBLKC ==ILK==6}LLBCCBCCCCCBL L CmC C CmC C=LEBLQL C CLQL=B C CCC >BI=LQL6}B=BL_L 6 6B1BILLLLZAP ADDRESS NOT FOUND!Lr =7=ILLM R6=ILMBC  TLMMM8>=>=} t6LWNPROBJ 1.0 - Written 6}in ACTION!(tm)(C)1984 John Navas II%EInput must be a standard DOS objectLoad file. Output will be a RAM mapand an optiona6}l compressed Load file.M 8LNcIndividual segments may be removedfrom and bytes may be "ZAP" changedin the output Load 6}file.%ENa 8LNBuffer size = %H%E==N 8 j4 >4 j<Mt =<>4=4=LO >4 >4 j<>4=4LO6}%CCANNOT OPEN FILE!%EO 8LOMLOLOLOLO 6M CLP%EAnother file? (Y/N) O 8 BLO j<} t6ML8P6} j<``MN FILE!%EO 8LOMLOLOLOLO 6M CLP%EAnother file? (Y/N) O 8 BLO j<} t6ML8P4 0100 ; SOUNDMAC.LIB0110 ;0120 .IF .NOT .DEF OSEQU0130 .ERROR "Must include OSEQU.LIB"0140 .END:}IF 0150 ;0160 ;0170 ;0180 ; MACRO: SOUND0190 ;0200 ; FORM: SOUND ch,pitch,timbre,voulme0210 ;0220 ; same as basic so:}und command0230 ;0240 .MACRO SOUND 0250 @LA %10260 STA TEMP0270 CLC 0280 ADC TEMP0290 TAX 0:}300 @LA %20310 STA AUDF1,X0320 @LA %30330 ASL A0340 ASL A0350 ASL A0360 ASL A0370 :}STA TEMP0380 @LA %40390 ORA TEMP0400 STA AUDC1,X0410 .ENDM 0420 ;0430 ;0440 ;60 ASL A0370 8g